In general, a neighborhood preserving code may be described as a code having a property that if two information strings are similar to each other, i.e., if a Hamming distance between the two information strings are small, then resulting codewords arising from the encoding of the two information strings with the code would also be close to each other. The neighborhood preserving property may be analogous to requiring that a coding map for the code be continuous, so that a neighborhood of an input information string is preserved after mapping.
Neighborhood preserving codes may be useful for several reasons. They include:                If a neighborhood preserving code is considered to be a normal channel code, except that an input string-to-codeword association is arranged in such a way that close-by information strings are mapped to close-by codewords. With such a code, even if a decoding of a received codeword makes an error, i.e., a codeword error, since the erroneous codeword is most likely to be a codeword that is close to a transmitted codeword corresponding to the received codeword, the decoded information bits are still close to information transmitted in the transmitted codeword. Therefore, a resulting bit error rate is minimized.        Neighborhood preserving codes may also be used for joint source channel codes. An input to a neighborhood preserving code may be considered to be a source description. Transmitted over a noisy channel, it may be inevitable that in some cases, the transmitted codeword is not received correctly. However, with the use of the neighborhood preserving code, a bit string decoded from the received codeword is still close to the transmitted bit string. Therefore, a graceful degradation of the reconstruction of the transmitted bit string is afforded.        Neighborhood preserving codes may also be used in multi-terminal scenarios. A relay node in a communications system may observe a noisy version of a transmitted signal. The relay node may need to decide if it can decode the transmitted signal correctly. Typically, the relay node's only option may be to amplify and forward the transmitted signal, which may limit overall performance. With a neighborhood preserving code, the relay node may be able to decode the transmitted signal with a confidence that most of the decoded bits are indeed correct. The relay node may then forward the decoded version of the transmitted signal with a high degree of confidence.        